package org.aerie.forest.core.frame.init;

import org.aerie.forest.core.frame.rebar._shelf.ForestInitShelf;
import org.aerie.forest.core.frame.rebar.entity.processer.configuration.context.ForestPrimeContext;
import org.aerie.forest.core.frame.rebar.factory.ForestFactory;

/**
 * @description forest的环境配置器
 *
 * @author quark
 * @organization aerie
 * @date 2020年2月27日 下午5:06:18
 * @version 1.2.0
 */
public enum ForestFrameContext {

	/**
	 * @description 单例
	 * 
	 * @author quark
	 * @date 2020年2月27日 下午5:06:28
	 * @version 1.2.0
	 */
	INSTANCE;

	/**
	 * @description forestRebal类加载器
	 * 
	 * @author quark
	 * @date 2020年2月27日 下午5:08:07
	 * @version 1.2.0
	 */
	public final ClassLoader forestClassLoader = Thread.currentThread().getContextClassLoader();

	/**
	 * @description forest版本号
	 * 
	 * @author quark
	 * @date 2020-10-16 13:23:23
	 * @version 2.0.1
	 */
	private final String forestVersion = "v2.2.1.RC";
	/**
	 * @description log环境初始化标识符
	 * 
	 * @author quark
	 * @date 2020年2月27日 下午5:06:44
	 * @version 1.2.0
	 */
	private boolean logInitSign = false;

	/**
	 * Construction
	 *
	 * @author quark
	 * @date 2020年6月17日 下午2:37:46
	 * @version 1.2.2
	 */
	private ForestFrameContext() {
		// Do Nothing
	}

	/**
	 * @description 获得log初始化标识符
	 * @return log初始化标识符
	 *
	 * @author quark
	 * @date 2020年6月17日 下午2:41:49
	 * @version 1.2.2
	 */
	public boolean getLogInitSign() {
		return logInitSign;
	}

	/**
	 * @description 获得forest版本号
	 * @return 版本号
	 *
	 * @author quark
	 * @date 2020-10-16 13:23:56
	 * @version 2.0.1
	 */
	public String getForestVersion() {
		return forestVersion;
	}

	/**
	 * @description log初始化
	 *
	 * @author quark
	 * @date 2020年6月17日 下午2:38:42
	 * @version 1.2.2
	 */
	public void logInit() {
		ForestLogInit.INSTANCE.loadLogConfig();
		// log初始化成功更新log环境初始化标识符
		logInitSign = true;
		// forest上下文初始化
		contextInit();
	}

	/**
	 * @description forest上下文初始化
	 *
	 * @author quark
	 * @date 2020年6月10日 下午6:16:37
	 * @version 1.2.2
	 */
	private void contextInit() {
		try {
			ForestFactory.INSTANCE.getForestRebarFactory(ForestInitShelf.getInstance().CONFIG_PROCESSOR)
					.generateYamlFile(ForestPrimeContext.class);
			ForestPrimeContext loadYamlConfig = ForestFactory.INSTANCE
					.getForestRebarFactory(ForestInitShelf.getInstance().CONFIG_PROCESSOR)
					.loadYamlConfig(ForestPrimeContext.class);
			System.err.println(loadYamlConfig.toString());
		} catch (Exception e) {
			ForestFactory.INSTANCE.getForestRebarFactory(ForestInitShelf.getInstance().EXCRPTION_PROCESSOR)
					.recordException("forest核心上下文初始化失败", e);
		}
	}
}
